/**
 * 字符串 https://book.kotlincn.net/text/strings.html
 */
fun main61() {
    //1.字符可以使用索引运算符访问: s[i]。 可以使用 for 循环遍历这些字符：
    val str = "abcd"
    for (c in str) {        //char c = var3.charAt(var2);
        print("$c ")
    }
    println()

    //2.如需连接字符串，可以用 + 操作符。这也适用于连接字符串与其他类型的值， 只要表达式中的第一个元素是字符串：
    val s = "abc" + 1
    println(s + "def")
}


/**
 * 字符串字面值
 *  Kotlin 有两种类型的字符串字面值:
 *      转义字符串
 *      原始字符串
 */
fun main62() {
    //1.转义字符串
    val s2 = "Hello, world!\n"
    /**
     * 2.原始字符串
     *   原始字符串可以包含换行以及任意文本。 它使用三个引号（"""）分界符括起来，内部没有转义并且可以包含换行以及任何其他字符：
     */
    val text = """
    for (c in "foo")    ${"\"\"\""} //插入3个'"'
        print(c)
"""
    println("start" + text + "end")

    /**
     * 如需删掉原始字符串中的前导空格，请使用 trimMargin() 函数：
     * 默认以竖线 | 作为边界前缀，但你可以选择其他字符并作为参数传入，比如 trimMargin(">")。
     */
    val text2 = """
        |Tell me and I forget.
        |Teach me and I remember.
        |Involve me and I learn.
        |(Benjamin Franklin)
        """
    print(text2.trimMargin(/*"|"*/))
}


/**
 * 字符串模板
 */
fun main63() {
    val i = 10
    println("i = $i")
    val s3 = "abc"
    println("$s3.length is ${s3.length}")

    /**
     * 在原始字符串及转义字符串中都可以使用模板。
     * 如需在原始字符串（不支持反斜杠转义）中的允许作为标识符（identifier）开头的任意符号之前插入美元符 $， 请使用以下语法：
     */
    val price = """
        ${'$'}_9.99
        """
    print("The price is" + price + ".")
}